package com.jiashihui.schema_lgorithm.java.thread;

/**
 * @author jiashihui
 * @date 2019/04/09
 */
public class ThreadTest {

    public static void main(String[] args) {
        // 数据不共享
//        MyThread a = new MyThread("A");
//        MyThread b = new MyThread("B");
//        MyThread c = new MyThread("C");

        MyThread mythread = new MyThread();
        //线程a b c启动的时候，执行的是myThread的方法，此时数据共享
        Thread a = new Thread(mythread, "A");
        Thread b = new Thread(mythread, "B");
        Thread c = new Thread(mythread, "C");
        a.start();
        b.start();
        c.start();
    }
}

/**
 * Thread 方法：
 * currentThread（），获得当前线程
 * isLive() 线程是否活跃状态（启动还未运行或者启动了正在运行即为活跃状态）
 * sleep()方法，让线程休眠
 * getId()方法 获得该线程的唯一标识
 * <p>
 * 停止线程的方法：线程自己执行完后自动终止、stop强制终止，不安全、使用interrupt方法。
 */
class MyThread extends Thread {
    private int count = 5000;

    public MyThread() {

    }

    public MyThread(String name) {
        super();
        this.setName(name);
    }

    // synchronized ['sɪŋkrənaɪzd] 关键字，给方法加上锁，多个线程尝试拿到锁，拿到锁的线程执行方法，拿不到的不断的尝试拿到锁
    @Override
    public synchronized void run() {
        super.run();
        while (count > 0) {
            count--;
            System.out.println("由 " + this.currentThread().getName() + " 计算，count=" + count);
        }
    }
}
